package com.jhgsys.internal.common.controller.base;

import com.jhgsys.internal.common.entity.FebsConstant;
import com.jhgsys.internal.common.entity.FebsResponse;
import com.jhgsys.internal.common.exception.FebsException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;

@Slf4j
public class ResultController {

    /**
     * 成功操作
     */
    public FebsResponse success() {
        return new FebsResponse().success();
    }

    /**
     * 成功操作
     */
    public FebsResponse success(String msg) {
        return new FebsResponse().success().message(msg);
    }

    /**
     * 成功操作
     */
    public FebsResponse success(Object data) {

        return new FebsResponse().success().data(data);
    }

    /**
     * 成功操作
     */
    public FebsResponse success(String message, Object data) {
        return new FebsResponse().success().message(message).data(data);
    }

    /**
     * 成功操作
     */
    public FebsResponse success(HttpStatus code, String message, Object data) {
        return new FebsResponse().success().code(code).message(message).data(data);
    }

    /**
     * 失败操作
     */
    public FebsResponse failure()
    {
        return  new FebsResponse().fail();
    }

    /**
     * 失败操作
     */
    public FebsResponse failure(String message) {
        return new FebsResponse().fail().message(message);
    }

    /**
     * 失败操作
     */
    public FebsResponse failure(String message, Object data) {
        return new FebsResponse().fail().message(message).data(data);
    }

    /**
     * 失败操作
     */
    public FebsResponse failure(HttpStatus code, String message, Object data) {
        return new FebsResponse().fail().code(code).message(message).data(data);
    }

    /**
     * 失败操作并记录日志
     */
    public FebsResponse failure(Exception ex) {
        String message = "操作失败";
        StackTraceElement ste = ex.getStackTrace()[0];
        String sbObj = "【用户提示】：" + message +
                       "|【后台异常提示】：" +
                       "异常类 - " + ste.getClassName() +
                       "；异常方法 - " + ste.getMethodName() +
                       "；异常信息 - " + ex.getMessage();
        log.error(sbObj);
        String name = ex.getClass().getName();
        String checkName = FebsException.class.getName();
        if (checkName.equals(name)) {
            message = ex.getMessage();
        }
        return new FebsResponse().fail().message(message);
    }

    /**
     * 失败操作并记录日志
     */
    public FebsResponse failure(Exception ex, String message) {
        StackTraceElement ste = ex.getStackTrace()[0];
        String sbObj = "【用户提示】：" + message +
                       "|【后台异常提示】：" +
                       "异常类 - " + ste.getClassName() +
                       "；异常方法 - " + ste.getMethodName() +
                       "；异常信息 - " + ex.getMessage();
        log.error(sbObj);
        String name = ex.getClass().getName();
        String checkName = FebsException.class.getName();
        if (checkName.equals(name)) {
            message = ex.getMessage();
        }
        return new FebsResponse().fail().message(message);
    }
    /**
     * 页面跳转
     * @param viewPath
     * @return
     */
    public static String jumpPage(String viewPath) {
        return FebsConstant.VIEW_PREFIX + viewPath;
    }
}
